#include <stdio.h>
#include <string.h>
//unistd.h是Linux/Unix系统中内置的头文件,其作用和Windows的"windows.h"类似
//是操作系统为用户提供的同意API接口,方便调用系统提供的一些服务
#include <unistd.h>

int main()
{
  #define NUM 100

  //多一个放位置放'\0'
  char progress_bar[NUM + 1];
  //全部初始化为'\0',之后添加字符的时候,不用考虑如何在尾部加'\0'
  memset(progress_bar, '\0', sizeof(progress_bar));

  //表示正在运行的符号串
  const char* lable = "|/-\\";

  int i = 0;
  while(i <= 100)
  {
    //回车表示回到当前行的最开始
    //换行表示列不变,新起一行
    //C程序,默认会打开三个输入输出流
    //stdin 接收键盘的标准输入文件
    //stdout 将正常输出的数据输入到标准输出文件
    //stderr 将错误信息送到标准错误文件中

    //[%-100s]表示格式化输出字符串,留出100个位置,向左对其
    //[%3d%%]表示格式化输出整形,留出3个位置,向右对其
    //\r表示回车
    //\n换行会把输出缓冲区给刷新,但是\r回车不会,所以下面用了fflush
    printf("[%-100s][%3d%%][%c]\r", progress_bar, i, lable[i % 4]);

    //将标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
    fflush(stdout);
    progress_bar[i] = '#';
    i++;
    //usleep睡眠千分之一毫秒
    //sleep睡眠一秒
    usleep(50000);
  }

  printf("\n");
  return 0;
}
